#pragma once

#include<iostream>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>

void Deamon()
{
    //首先需要让此进程成为独立的会话；需要注意的是，不能进程组的组长调用setsid
    //忽略一些型号，SIGCHLD SIGPIPE
    signal(SIGCHLD,SIG_IGN);
    signal(SIGPIPE,SIG_IGN);

    //更改工作目录，以绝对路径的方式进行访问
    chdir("/");

    //创建子进程，让父进程退出
    if(fork()>0) 
    {
        exit(0);
    }

    //子进程
    setsid();

    //关闭stdin stdout stderr;或者将其重定向到 /dev/null 下
    int fd = open("/dev/null" , O_RDWR);
    if(fd > 0)
    {
        dup2(fd,0);
        dup2(fd,1);
        dup2(fd,2);
    }
}